package com.njwb.day15.zqzb.method.dyc;

import com.njwb.day15.zqzb.method.proxy.RealSubject;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;

//自定义调用处理器
public class MyInvocationHandler  implements InvocationHandler {

    //真实对象
    private Object obj ;


    public Object getObj() {
        return obj;
    }

    public void setObj(Object obj) {
        this.obj = obj;
    }

    public MyInvocationHandler(Object obj) {
        this.obj = obj;
    }

    public Object getProxy(){

        //创建一个代理对象
        return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),this);
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        if(obj.getClass()== RealSubject.class)  {
            beforeGetMoney();
            //转移到这里执行。
            method.invoke(obj,args);
            System.out.println("代码进入了。。。。。。。。。。。。。。");
            afterGetMoney();
        }else if(obj.getClass()== ArrayList.class){
                if("add".equals(method.getName())) {
                    String value = (String) args[0];
                    if(value.equals("Node")||value.equals("b")||value.equals("c")) {
                        return false;
                    }else{
                        return method.invoke(obj,args);
                    }
                }else{
                    return method.invoke(obj,args);
                }
        }
        return null;
    }

    private void beforeGetMoney(){
        System.out.println("埋个炸弹放在欠债者的老家。");
        System.out.println("在把儿子，女儿全部绑了");
        System.out.println("在多一根手指送到欠债者的面前");
    }


    private  void afterGetMoney(){
        System.out.println("抽30%的成！！！");
    }
}
